.h файл:
class CVector
{
public:
CVector();
CVector(float vx, float vy, float vz);
CVector(const CVector& v);
virtual ~CVector();
public:
float x, y, z;
inline float Magnitude();
CVector& Normalize();
CVector GetNormalized() const;
CVector operator+ (const CVector& v) const;
CVector& operator+=(const CVector& v);
CVector operator- () const;
CVector operator- (const CVector& v) const;
CVector& operator-=(const CVector& v);
CVector operator* (float k) const;
CVector& operator*=(float k);
float operator^ (const CVector& v) const;
CVector operator| (const CVector& v) const;
CVector& operator|=(const CVector& v);
CVector& operator= (const CVector& v);
bool operator==(const CVector& v) const;
bool operator!=(const CVector& v) const;
};
.cpp файл:
CVector::CVector(): x(0), y(0), z(0){};
CVector::CVector(float vx, float vy, float vz):
x(vx), y(vy), z(vz){};
CVector::CVector(const CVector& v): x(v.x), y(v.y), z(v.z){};
CVector::~CVector(){};
inline float CVector::Magnitude()
{
return (float)sqrt(x*x + y*y +z*z);
}
CVector& CVector::Normalize()
{
const float k=Magnitude();
x /= k;
y /= k;
z /= k;
return *this;
}
CVector CVector::GetNormalized() const
{
return CVector(*this).Normalize();
}
CVector CVector::operator+(const CVector& v) const
{
return CVector(x+v.x, y+v.y, z+v.z);
}
CVector& CVector::operator+=(const CVector& v)
{
x += v.x;
y += v.y;
z += v.z;
return *this;
}
CVector CVector::operator-() const
{
return CVector(-x,-y,-z);
}
CVector CVector::operator-(const CVector& v) const
{
return CVector(x-v.x, y-v.y, z-v.z);
}
CVector& CVector::operator-=(const CVector& v)
{
x -= v.x;
y -= v.y;
z -= v.z;
return *this;
}
CVector CVector::operator*(float k) const
{
return CVector(k*x, k*y, k*z);
}
CVector& CVector::operator*=(float k)
{
x *= k;
y *= k;
z *= k;
return *this;
}
float CVector::operator^(const CVector& v) const
{
return (x*v.x + y*v.y + z*v.z);
}
CVector CVector::operator|(const CVector& v) const
{
return
CVector(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x);
}
CVector& CVector::operator|=(const CVector& v)
{
x = y*v.z - z*v.y;
y = z*v.x - x*v.z;
z = x*v.y - y*v.x;
return *this;
}
CVector& CVector::operator=(const CVector& v)
{
x = v.x;
y = v.y;
z = v.z;
return *this;
}
bool CVector::operator==(const CVector& v) const
{
if (x==v.x && y==v.y && z==v.z)
return true;
else
return false;
}
bool CVector::operator!=(const CVector& v) const
{
return !(*this==v);
}
Файл со всеми классами геометрических операций можно найти, например, в главе
шаблоны для OpenGL.